458. Декодер

 

Имеется текст, закодированный в результате простой арифметической манипуляции над ASCII кодами символов. Необходимо декодировать текст.

 

Вход. Закодированный текст.

 

Выход. Исходный текст.

 

Пример входа

1JKJ'pz'{ol'{yhklthyr'vm'{ol'Jvu{yvs'Kh{h'Jvywvyh{pvu5

1PIT'pz'h'{yhklthyr'vm'{ol'Pu{lyuh{pvuhs'I|zpulzz'Thjopul'Jvywvyh{pvu5

1KLJ'pz'{ol'{yhklthyr'vm'{ol'Kpnp{hs'Lx|pwtlu{'Jvywvyh{pvu5

 

Пример выхода

*CDC is the trademark of the Control Data Corporation.
*IBM is a trademark of the International Business Machine Corporation.
*DEC is the trademark of the Digital Equipment Corporation.
 

 

РЕШЕНИЕ

простое кодирование

 

Анализ алгоритма

В условии задачи имеется закодированный и декодированный тексты. Следует перебрать всевозможные шифры подстановки и угадать тот факт, что кодирование представляет собой циклический сдвиг ASCII кодов символов на 7 (по модулю 256). Следовательно для декодирования достаточно произвести циклический сдвиг ASCII кодов символов на 249 (по модулю 256).

 

Реализация алгоритма

Читаем посимвольно текст. Каждый символ перевода каретки оставляем таким, как он есть. Иначе производим циклический сдвиг каждого ASCII кода символа на 249 по модулю 256 и выводим как символ.

 

char ch;

while (scanf("%c", &ch) == 1)

  if (ch == '\n') printf("\n");

  else printf("%c", (char)((ch + 249) % 256));